package mx.ipn.presentacion.radioperadora;

import java.sql.Date;
import java.util.ArrayList;
import java.util.Arrays;

import com.trolltech.qt.gui.*;
import com.trolltech.qt.core.*;

import mx.ipn.presentacion.ConexionConNegocios;
import mx.ipn.presentacion.Utilerias;
import mx.ipn.presentacion.radioperadora.ui.*;
import mx.ipn.presentacion.telefonista.BusquedaBitacora;
import mx.ipn.presentacion.telefonista.Chat;
import mx.ipn.to.*;

public class OperadoraPrincipal extends QMainWindow {
	Ui_MainWindowOperadora ui = new Ui_MainWindowOperadora();
	Chat chat;
	
	private final short EN_BASE = 0;
	private final short EN_SERVICIO = 1;
	private final short NO_ESTA = 2;
	
	QTimer timer;
	
	QAction editarAction, cancelarAction, asignarAction, cubrirAction;
	QAction agregarAction, quitarAction;
	QPoint popupPoint = new QPoint();
	QPoint popupPointBases = new QPoint();
	
	DialogRegistrarUnidad dialogRegistrarUnidad;
	DialogRegistrarEconomico dialogRegistrarEconomico;
	
	int[] cajonesTotales;
	int[] cajonesOcupados;

	ArrayList<BitacoraServicioTO> arrayListBitacora = new ArrayList<BitacoraServicioTO>();
	ArrayList<EconomicoTO>[] ecoBases;
	
	BitacoraServicioTO[] bitacora;
	UnidadTO[] unidades;
	ChoferTO[] choferes;
	EconomicoTO[] economicos;
	BaseTO[] bases;
	
	UsuarioTO usuario;
	
	boolean[] isUnidadPresente;
	boolean[] isChoferPresente;
	short[] statusEconomico;
	
	int[] bitacoraCU;
	short revision = 0;
	
	// El widget para consultar en la bitacora
	BusquedaBitacora busquedaBitacora;
	
	public OperadoraPrincipal(UsuarioTO usuario) {
		ui.setupUi(this);

		this.usuario = usuario;
		
		createActions();
		
		ui.tableWidgetBases.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu);
		ui.tableWidgetBitacora
				.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu);

		// centra la ventana de acorde a la resolucion del monitor
		Utilerias.centrarVentana(this);

		timer = new QTimer();
		timer.start(5000);
		timer.timeout.connect(this, "llenarBitacoraPorRevision()");

		ui.actionChat.triggered.connect(this, "mostrarWidgetChat()");
		ui.actionMapa.triggered.connect(this, "mostrarMapa()");

		ui.actionRegistrar.triggered.connect(this, "mostrarDialogAltaEconomico()");
		
		ui.actionBuscar_Filtrar.triggered.connect(this,
		"mostrarDialogBusquedaBitacora()");
		
		llenarBitacora();
		llenarChoferes();
		llenarUnidades();
		llenarEconomicos();
		
		crearBases();
	}
	
	private void mostrarDialogAltaEconomico() {
		if(dialogRegistrarEconomico==null)
			dialogRegistrarEconomico = new DialogRegistrarEconomico();
	}
	
	// para mostrar la consulta de bitacoras
	private void mostrarDialogBusquedaBitacora() {
		if (busquedaBitacora == null)
			busquedaBitacora = new BusquedaBitacora();

		busquedaBitacora.limpiaModelo();

		for (int i = 0; i < ui.tableWidgetBitacora.rowCount(); i++) {
			System.out.println(i);
			busquedaBitacora.agregaServicio(ui.tableWidgetBitacora.item(i, 0)
					.text(), ui.tableWidgetBitacora.item(i, 1).text(),
					ui.tableWidgetBitacora.item(i, 2).text(),
					ui.tableWidgetBitacora.item(i, 3).text(),
					ui.tableWidgetBitacora.item(i, 4).text(),
					ui.tableWidgetBitacora.item(i, 5).text(),
					ui.tableWidgetBitacora.item(i, 6).text(),
					ui.tableWidgetBitacora.item(i, 7).text(),
					ui.tableWidgetBitacora.item(i, 8).text(),
					ui.tableWidgetBitacora.item(i, 9).text(),
					ui.tableWidgetBitacora.item(i, 10).text(),
					ui.tableWidgetBitacora.item(i, 11).text(),
					ui.tableWidgetBitacora.item(i, 12).text(),
					ui.tableWidgetBitacora.item(i, 13).text(),
					ui.tableWidgetBitacora.item(i, 14).text(),
					ui.tableWidgetBitacora.item(i, 15).text(),
					ui.tableWidgetBitacora.item(i, 16).text());
		}

		Utilerias.centrarVentana(busquedaBitacora);
		busquedaBitacora.exec();
	}

	private void llenarChoferes(){
		choferes = (ChoferTO[]) ConexionConNegocios.invocaServicio("obtenerChoferes", ChoferTO[].class);
		
		isChoferPresente = new boolean[choferes.length];
		
		for(int i=0; i<isChoferPresente.length; i++)
			isChoferPresente[i] = false;
	}

	private void llenarUnidades(){
		unidades = (UnidadTO[]) ConexionConNegocios.invocaServicio("obtenerUnidades", UnidadTO[].class);

		isUnidadPresente = new boolean[unidades.length];
		bitacoraCU =  new int[unidades.length];
		
		for(int i=0; i< isUnidadPresente.length; i++)
			isUnidadPresente[i] = false;
	}
	
	private void llenarEconomicos(){
		economicos = (EconomicoTO[]) ConexionConNegocios.invocaServicio("obtenerEconomicos", EconomicoTO[].class);
		
		statusEconomico = new short[unidades.length];
		
		for(int i=0; i<statusEconomico.length; i++)
			statusEconomico[i] = this.NO_ESTA;
	}
	
	/** ************ crearBases ************* */

	private void crearBases() {
		bases = (BaseTO[]) ConexionConNegocios.invocaServicio(
				"seleccionarBases", BaseTO[].class);

		cajonesTotales = new int[bases.length];
		cajonesOcupados = new int[bases.length];

		int totalFilas = 0;
		for (int i = 0; i < bases.length; i++) {
			cajonesTotales[i] = bases[i].getNumeroCajones();
			cajonesOcupados[i] = 0;

			ui.tableWidgetBases.insertColumn(i);

			QTableWidgetItem colItem = new QTableWidgetItem();
			colItem.setText(bases[i].getTipoBaseTO().getNombre());
			ui.tableWidgetBases.setHorizontalHeaderItem(i, colItem);

			if (totalFilas < bases[i].getNumeroCajones())
				totalFilas = bases[i].getNumeroCajones();
		}

		ecoBases = (ArrayList<EconomicoTO>[])new ArrayList[bases.length];
		
		for(int i=0; i<bases.length; i++)
			ecoBases[i] = new ArrayList<EconomicoTO>();
		
		ui.tableWidgetBases.setRowCount(totalFilas);

		for (int i = 0; i < bases.length; i++) {
			for (int j = 0; j < totalFilas; j++) {
				QTableWidgetItem item;
								
				item = new QTableWidgetItem("");
				ui.tableWidgetBases.setItem(j, i, item);

				if (j > cajonesTotales[i]-1){
					ui.tableWidgetBases.item(j, i).setBackground(
							new QBrush(new QColor(Qt.GlobalColor.black),
									Qt.BrushStyle.SolidPattern));
				}
			}
		}

	}

	/*********** acciones ************/
	
	private void createActions() {
		asignarAction = new QAction(tr("&Asignar Servicio"), this);
		asignarAction
				.setStatusTip(tr("Asigna el servicio seleccionado a un taxista."));
		asignarAction.triggered.connect(this, "asignarServicio()");

		editarAction = new QAction(tr("&Editar Servicio"), this);
		editarAction.setStatusTip(tr("Editar el servicio seleccionado."));
		editarAction.triggered.connect(this, "editarServicio()");

		cancelarAction = new QAction(tr("&Cancelar Servicio"), this);
		cancelarAction.setStatusTip(tr("Cancela el servicio seleccionado."));
		cancelarAction.triggered.connect(this, "cancelarServicio()");
		
		cubrirAction = new QAction(tr("&Cubrir Servicio"), this);
		cubrirAction.setStatusTip(tr("Marca el servicio como cubierto."));
		cubrirAction.triggered.connect(this, "cubrirServicio()");

		agregarAction = new QAction(tr("&Agregar Económico"), this);
		agregarAction.setStatusTip(tr("Agrega el económico seleccionado."));
		agregarAction.triggered.connect(this, "agregarEconomico()");
		
		quitarAction = new QAction(tr("&Quitar el Económico"), this);
		quitarAction.setStatusTip(tr("Remueve el económico seleccionado."));
		quitarAction.triggered.connect(this, "quitarEconomico()");
	}

	public OperadoraPrincipal(QWidget parent) {
		ui.setupUi(this);
	}

	// para mostrar el widget agregar servicio
	private void mostrarWidgetChat() {
		if (chat == null)
			chat = new Chat();

		chat.show();
	}

	private void mostrarMapa() {
		// no windows
		if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) {

			String curDir = System.getProperty("user.dir");

			System.out.println(curDir);

			try {
				Process p = Runtime.getRuntime().exec("bin/Mapa/Linux/Mapa");
			} catch (Exception e) {
				e.printStackTrace();
			}

		}
		// windows
		else {
			try {
				Process p2 = Runtime.getRuntime().exec(
						"bin\\Mapa\\Windows\\Mapa.exe");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
/*
	private void on_tableWidgetBitacora_cellClicked(int fila, int columna) {
		QMessageBox.about(this, "titulo", "fila:" + fila + " columna:"
				+ columna);
	}
*/
	private void on_tableWidgetBases_customContextMenuRequested(QPoint p) {
		popupPointBases = p;

		QMenu menu = new QMenu(this);
		menu.addAction(agregarAction);
		menu.addAction(quitarAction);

		menu.exec(ui.tableWidgetBases.mapToGlobal(p));
	}
	
	private void on_tableWidgetBitacora_customContextMenuRequested(QPoint p) {
		popupPoint = p;

		QMenu menu = new QMenu(this);
		menu.addAction(cancelarAction);
		menu.addAction(asignarAction);
		menu.addAction(cubrirAction);
		//menu.addAction(editarAction);

		menu.exec(ui.tableWidgetBitacora.mapToGlobal(p));
	}

	private void agregarEconomico(){
		QTableWidgetItem item = ui.tableWidgetBases.itemAt(popupPointBases);

		int columna = ui.tableWidgetBases.columnAt(popupPointBases.x());
		
		if(dialogRegistrarUnidad == null)
			dialogRegistrarUnidad = new DialogRegistrarUnidad();
		
		dialogRegistrarUnidad.exec();
		
		int eco = dialogRegistrarUnidad.getEconomicoIndex();
		
		boolean encontrado = false;
		int i;
		for(i=0; i<economicos.length; i++){
			if(economicos[i].getIdEconomico()==eco){
				encontrado = true;
				break;
			}
		}
		
		if(statusEconomico[i]!=this.EN_BASE){
			QMessageBox.information(this, "Información", "El económico se ha agregado a la base");
		
			
			for (int j = 0; j < ecoBases.length; j++) {
				for (int k = 0; k < bases[j].getNumeroCajones(); k++) {
					QTableWidgetItem item2;
									
					item2 = new QTableWidgetItem("");
					ui.tableWidgetBases.setItem(k, j, item2);

					if (k > cajonesTotales[j]-1){
						ui.tableWidgetBases.item(k, j).setBackground(
								new QBrush(new QColor(Qt.GlobalColor.black),
										Qt.BrushStyle.SolidPattern));
					}
				}
			}
			
			if(encontrado==true){
				ecoBases[columna].add(economicos[i]);
			
			for(int j=0; j<ecoBases.length; j++)
				for(int k=0; k<ecoBases[j].size(); k++){
					ui.tableWidgetBases.setItem(k, j, new QTableWidgetItem("eco: " + ecoBases[j].get(k).getIdEconomico()));
				}
	
			statusEconomico[i]=this.EN_BASE;
			
			BitacoraChoferUnidadTO bCU = new BitacoraChoferUnidadTO();
			
			bCU.setIdChofer(dialogRegistrarUnidad.getChoferId());
			bCU.setIdUnidad(dialogRegistrarUnidad.getUnidadId());
			bCU.setFecha(new java.util.Date());
			
			bitacoraCU[i] = (Integer) ConexionConNegocios.invocaServicio("asignarChoferUnidad",
					bCU, Integer.class);
			}
		}else
			QMessageBox.information(this, "Información", "El económico ya estaba en una base");
	
	}
	
	private void quitarEconomico(){
		
	}
	
	private void asignarServicio() {
		
		QTableWidgetItem item = ui.tableWidgetBitacora.itemAt(popupPoint);

		int fila = ui.tableWidgetBitacora.rowAt(popupPoint.y());

		PeticionBitacoraServiciosPorRevisionTO p = new PeticionBitacoraServiciosPorRevisionTO();
		
		BitacoraServicioTO[] bitacoraServicioTO = new BitacoraServicioTO[1];
		bitacoraServicioTO[0] = obtenerBitacoraPorFila(fila);

	
	

		int eco = QInputDialog.getInteger(this, "Económico", "Ingresa el económico");
		
		if(eco>0){
		int i;
		boolean encontrado = false;
		for(i=0; i<economicos.length; i++){
			if(economicos[i].getIdEconomico()==eco){
				encontrado = true;
				break;
			}
		}
		
		if(encontrado){
		bitacoraServicioTO[0].setIdStatus((short) 1);
		bitacoraServicioTO[0].setIdUsuarioOperadora(usuario.getIdUsuario());
		bitacoraServicioTO[0].setIdOperacionChofUni(bitacoraCU[i]);
		bitacoraServicioTO[0].setFechaAsignacion(new java.util.Date());
		bitacoraServicioTO[0].setHoraAsignacion(new java.util.Date());
		
		short[] renglones = new short[1];
		renglones[0] = (short)fila;
		
		p.setBitacora(bitacoraServicioTO);
		p.setRenglon(renglones);
		
		ConexionConNegocios.invocaServicio("actualizarBitacoraServicios",
				p, TransferObject.class);

		QMessageBox.information(this, "Información", "Asignado correctamente");
		
		statusEconomico[i]= this.EN_SERVICIO;

		for (int j = 0; j < ecoBases.length; j++) {
			for (int k = 0; k < bases[j].getNumeroCajones(); k++) {
				QTableWidgetItem item2;
								
				item2 = new QTableWidgetItem("");
				ui.tableWidgetBases.setItem(k, j, item2);

				if (k > cajonesTotales[j]-1){
					ui.tableWidgetBases.item(k, j).setBackground(
							new QBrush(new QColor(Qt.GlobalColor.black),
									Qt.BrushStyle.SolidPattern));
				}
			}
		}
		
		for(int j=0; j<ecoBases.length; j++)
			for(int k=0; k<ecoBases[j].size(); k++)
				if(ecoBases[j].get(k).getIdEconomico()==eco){
					ecoBases[j].remove(k);
					break;
				}
		
		for(int j=0; j<ecoBases.length; j++)
			for(int k=0; k<ecoBases[j].size(); k++){
				ui.tableWidgetBases.setItem(k, j, new QTableWidgetItem("eco: " + ecoBases[j].get(k).getIdEconomico()));
			}
		}
		else
			QMessageBox.critical(this, "Error", "Económico no existe");}
	}

	private void editarServicio() {

	}

	private void cancelarServicio() {
		QTableWidgetItem item = ui.tableWidgetBitacora.itemAt(popupPoint);

		int fila = ui.tableWidgetBitacora.rowAt(popupPoint.y());

		PeticionBitacoraServiciosPorRevisionTO p = new PeticionBitacoraServiciosPorRevisionTO();
		
		BitacoraServicioTO[] bitacoraServicioTO = new BitacoraServicioTO[1];
		bitacoraServicioTO[0] = obtenerBitacoraPorFila(fila);
		bitacoraServicioTO[0].setIdStatus((short) 2);

		short[] renglones = new short[1];
		renglones[0] = (short)fila;
		
		p.setBitacora(bitacoraServicioTO);
		p.setRenglon(renglones);
		
		ConexionConNegocios.invocaServicio("actualizarBitacoraServicios",
				p, TransferObject.class);

	}
	
	private void cubrirServicio() {
		QTableWidgetItem item = ui.tableWidgetBitacora.itemAt(popupPoint);

		int fila = ui.tableWidgetBitacora.rowAt(popupPoint.y());

		PeticionBitacoraServiciosPorRevisionTO p = new PeticionBitacoraServiciosPorRevisionTO();
		
		BitacoraServicioTO[] bitacoraServicioTO = new BitacoraServicioTO[1];
		bitacoraServicioTO[0] = obtenerBitacoraPorFila(fila);
		bitacoraServicioTO[0].setIdStatus((short) 3);
		bitacoraServicioTO[0].setFechaCubierto(new java.util.Date());
		bitacoraServicioTO[0].setHoraCubierto(new java.util.Date());

		short[] renglones = new short[1];
		renglones[0] = (short)fila;
		
		p.setBitacora(bitacoraServicioTO);
		p.setRenglon(renglones);
		
		ConexionConNegocios.invocaServicio("actualizarBitacoraServicios",
				p, TransferObject.class);
	}

	private BitacoraServicioTO obtenerBitacoraPorFila(int i) {
		BitacoraServicioTO to = new BitacoraServicioTO();

		to.setFechaEntrada(arrayListBitacora.get(i).getFechaEntrada());
		to.setFechaCaptura(arrayListBitacora.get(i).getFechaCaptura());
		to.setFechaAsignacion(arrayListBitacora.get(i).getFechaAsignacion());
		to.setFechaCubierto(arrayListBitacora.get(i).getFechaCubierto());

		to.setHoraEntrada(arrayListBitacora.get(i).getHoraEntrada());
		to.setHoraCaptura(arrayListBitacora.get(i).getHoraCaptura());
		to.setHoraAsignacion(arrayListBitacora.get(i).getHoraAsignacion());
		to.setHoraCubierto(arrayListBitacora.get(i).getHoraCubierto());

		to.setObservaciones(arrayListBitacora.get(i).getObservaciones());
		to.setFactura(arrayListBitacora.get(i).getFactura());
		to.setTelefono(arrayListBitacora.get(i).getTelefono());

		to.setIdUsuarioTelefonista(arrayListBitacora.get(i).getListUsuarioTelefonistaTO()[0]
				.getIdUsuario());

		if (arrayListBitacora.get(i).getListUsuarioOperadoraTO() != null)
			to.setIdUsuarioOperadora(arrayListBitacora.get(i).getListUsuarioOperadoraTO()[0]
					.getIdUsuario());

		to.setIdFormaPago(arrayListBitacora.get(i).getListFormaPagoTO()[0].getIdFormaPago());
		to.setIdCliente(arrayListBitacora.get(i).getListClienteTO()[0].getIdCliente());
		to.setIdDireccionDestino(arrayListBitacora.get(i).getListDireccionDestinoTO()[0]
				.getIdDireccion());
		to.setIdClienteDireccion(arrayListBitacora.get(i).getListClienteDireccionTO()[0]
				.getIdClienteDireccion());

		if (arrayListBitacora.get(i).getListBitacoraChoferUnidadTO() != null)
			to.setIdOperacionChofUni(arrayListBitacora.get(i)
					.getListBitacoraChoferUnidadTO()[0].getIdOperacion());
		to.setIdTipoServicio(arrayListBitacora.get(i).getListTipoServicioTO()[0]
				.getIdTipoServicio());

		to.setIdOperacion(arrayListBitacora.get(i).getIdOperacion());

		return to;
	}
	
	/*
	 * protected void contextMenuEvent(QContextMenuEvent ev) {
	 * QMessageBox.about(this, "titulo", "padre");
	 *  }
	 */

	// para llenar la bitacora de servicios inicialmente
	private void llenarBitacora() {

		java.util.Date dia = new java.util.Date();

		// bitacora =
		PeticionBitacoraServiciosPorRevisionTO peticion = (PeticionBitacoraServiciosPorRevisionTO) ConexionConNegocios
				.invocaServicio("obtenerBitacoraServiciosPorDia", dia,
						PeticionBitacoraServiciosPorRevisionTO.class);

		if (peticion == null)
			System.out.println("nulo peticion");
		else {

			revision = peticion.getRevision();
			System.out.println("revision obtenida: " + revision);

			
			bitacora = peticion.getBitacora();

			if(bitacora==null)
				System.out.println("bitacora nulo");
			else{
			arrayListBitacora = new ArrayList<BitacoraServicioTO>( Arrays.asList( bitacora ) );

			for (int i = 0; i < arrayListBitacora.size(); i++) {
				if (ui.tableWidgetBitacora.rowCount() < i + 1)
					ui.tableWidgetBitacora.insertRow(i);

				llenarDatosBitacora(i, arrayListBitacora.get(i));
			}
			}
			System.out.println("paso");
		}

		System.out.println("paso2");

	}

	private void llenarBitacoraPorRevision() {
		// bitacora =
		PeticionBitacoraServiciosPorRevisionTO peticion = (PeticionBitacoraServiciosPorRevisionTO) ConexionConNegocios
				.invocaServicio("obtenerBitacoraServiciosPorRevision",
						revision, PeticionBitacoraServiciosPorRevisionTO.class);

		if(peticion!=null)
		
		if (peticion.getRevision() > revision) {
			revision = peticion.getRevision();
			System.out.println("revision obtenida: " + revision);

			short[] renglones = peticion.getRenglon();

			BitacoraServicioTO[] bitacora2 = peticion.getBitacora();

			if(bitacora2==null)
				System.out.println("bitacora2 nula");
			else{
			for (int i = 0; i < bitacora2.length; i++) {
				if (ui.tableWidgetBitacora.rowCount() < (renglones[i] + 1)){
					ui.tableWidgetBitacora.insertRow(renglones[i]);
					arrayListBitacora.add(bitacora2[i]);
				}
				else{
					arrayListBitacora.remove(renglones[i]);
					arrayListBitacora.add(renglones[i], bitacora2[i]);
				}
				llenarDatosBitacora(renglones[i], bitacora2[i]);
			}
			}
			System.out.println("paso");
		}

		System.out.println("paso2");
	}

	private void llenarDatosBitacora(int renglon, BitacoraServicioTO bitacora) {
		ui.tableWidgetBitacora.setItem(renglon, 0, new QTableWidgetItem(Integer
				.toString(bitacora.getIdOperacion())));

		ui.tableWidgetBitacora.setItem(renglon, 1, new QTableWidgetItem(
				bitacora.getListTipoServicioTO()[0].getCategoriaServicioTO()
						.getNombre()
						+ " - "
						+ bitacora.getListTipoServicioTO()[0]
								.getSubcategoriaServicioTO().getNombre()
						+ " - "
						+ bitacora.getListTipoServicioTO()[0].getFactorTO()
								.getDescripcion()));

		// fechas
		String fechaCaptura = bitacora.getFechaCaptura().toString().substring(
				0, 11)
				+ bitacora.getHoraCaptura().toString().substring(11, 20)
				+ bitacora.getFechaCaptura().toString().substring(20);
		String fechaEntrada = bitacora.getFechaEntrada().toString().substring(
				0, 11)
				+ bitacora.getHoraEntrada().toString().substring(11, 20)
				+ bitacora.getFechaEntrada().toString().substring(20);

		// captura
		ui.tableWidgetBitacora.setItem(renglon, 2, new QTableWidgetItem(
				fechaCaptura));
		// asignacion
		if (bitacora.getFechaAsignacion() != null)
			ui.tableWidgetBitacora.setItem(renglon, 3, new QTableWidgetItem(
					bitacora.getFechaAsignacion().toString().substring(0, 11)
							+ bitacora.getHoraAsignacion().toString()
									.substring(11, 20)
							+ bitacora.getFechaAsignacion().toString()
									.substring(20)));
		else
			ui.tableWidgetBitacora
					.setItem(renglon, 3, new QTableWidgetItem(""));
		// cubierto
		if (bitacora.getFechaCubierto() != null)
			ui.tableWidgetBitacora.setItem(renglon, 4, new QTableWidgetItem(
					bitacora.getFechaCubierto().toString().substring(0, 11)
							+ bitacora.getHoraCubierto().toString().substring(
									11, 20)
							+ bitacora.getFechaCubierto().toString().substring(
									20)));
		else
			ui.tableWidgetBitacora
					.setItem(renglon, 4, new QTableWidgetItem(""));

		// reservacion
		if (fechaCaptura.compareTo(fechaEntrada) == 0) {
			QTableWidgetItem itemFechaEntrada = new QTableWidgetItem("no");
			itemFechaEntrada
					.setIcon(new QIcon(
							"classpath:mx/ipn/presentacion/recursos/iconos/cancel.png"));
			ui.tableWidgetBitacora.setItem(renglon, 5, itemFechaEntrada);

		} else
			ui.tableWidgetBitacora.setItem(renglon, 5, new QTableWidgetItem(
					fechaEntrada));

		ui.tableWidgetBitacora.setItem(renglon, 6, new QTableWidgetItem(
				bitacora.getListStatusTO()[0].getNombre()));
		ui.tableWidgetBitacora.setItem(renglon, 7, new QTableWidgetItem(
				bitacora.getListClienteTO()[0].getApellidoPaterno() + " "
						+ bitacora.getListClienteTO()[0].getApellidoMaterno()
						+ " " + bitacora.getListClienteTO()[0].getNombre()));
		ui.tableWidgetBitacora.setItem(renglon, 8, new QTableWidgetItem(
				bitacora.getTelefono()));

		// Direccion Origen
		DireccionTO d = bitacora.getListClienteDireccionTO()[0]
				.getListDireccionTO()[0];
		String direccion = new String();

		CalleTO[] calleTO = d.getColoniaCalleTO().getListCalleTO();
		for (CalleTO c : calleTO) {
			direccion = c.getNombre() + ", #" + d.getNumero() + ", I"
					+ d.getInterior();
		}

		ColoniaTO[] coloniaTO = d.getColoniaCalleTO().getListColoniaTO();
		for (ColoniaTO c : coloniaTO) {
			direccion += ", Col:";
			direccion += c.getNombre();

			MunicipioTO municipioTO = c.getMunicipioTO();

			direccion += ", Del:";
			direccion += municipioTO.getNombre();
		}

		direccion += ", Entre las Calles:";
		direccion += d.getEntreCalles();

		direccion += ", Otras Referencias:";
		direccion += d.getOtrasReferencias();

		ui.tableWidgetBitacora.setItem(renglon, 9, new QTableWidgetItem(
				direccion));

		// Direccion Origen
		d = bitacora.getListDireccionDestinoTO()[0];
		direccion = "";

		calleTO = d.getColoniaCalleTO().getListCalleTO();
		for (CalleTO c : calleTO) {
			direccion = c.getNombre() + ", #" + d.getNumero() + ", I"
					+ d.getInterior();
		}

		coloniaTO = d.getColoniaCalleTO().getListColoniaTO();
		for (ColoniaTO c : coloniaTO) {
			direccion += ", Col:";
			direccion += c.getNombre();

			MunicipioTO municipioTO = c.getMunicipioTO();

			direccion += ", Del:";
			direccion += municipioTO.getNombre();
		}

		direccion += ", Entre las Calles:";
		direccion += d.getEntreCalles();

		direccion += ", Otras Referencias:";
		direccion += d.getOtrasReferencias();

		ui.tableWidgetBitacora.setItem(renglon, 10, new QTableWidgetItem(
				direccion));

		ui.tableWidgetBitacora.setItem(renglon, 11, new QTableWidgetItem(
				bitacora.getListFormaPagoTO()[0].getNombre()));

		// factura
		QTableWidgetItem itemSi = new QTableWidgetItem("si");
		itemSi.setIcon(new QIcon(
				"classpath:mx/ipn/presentacion/recursos/iconos/ok.png"));
		QTableWidgetItem itemNo = new QTableWidgetItem("no");
		itemNo.setIcon(new QIcon(
				"classpath:mx/ipn/presentacion/recursos/iconos/cancel.png"));

		if (bitacora.getFactura())
			ui.tableWidgetBitacora.setItem(renglon, 12, itemSi);

		else
			ui.tableWidgetBitacora.setItem(renglon, 12, itemNo);

		ui.tableWidgetBitacora.setItem(renglon, 13, new QTableWidgetItem(
				bitacora.getObservaciones()));

		ui.tableWidgetBitacora.setItem(renglon, 14, new QTableWidgetItem(
				bitacora.getListUsuarioTelefonistaTO()[0].getNombreUsuario()));

		if (bitacora.getListUsuarioOperadoraTO() != null)
			ui.tableWidgetBitacora
					.setItem(renglon, 15, new QTableWidgetItem(bitacora
							.getListUsuarioOperadoraTO()[0].getNombreUsuario()));
		else
			ui.tableWidgetBitacora.setItem(renglon, 15,
					new QTableWidgetItem(""));

		if (bitacora.getListBitacoraChoferUnidadTO() != null) {
			PersonaTO chofer = bitacora.getListBitacoraChoferUnidadTO()[0]
					.getListChoferTO()[0];
			ui.tableWidgetBitacora.setItem(renglon, 16, new QTableWidgetItem(
					chofer.getNombre() + " " + chofer.getApellidoMaterno()
							+ " " + chofer.getApellidoMaterno()));
		} else
			ui.tableWidgetBitacora.setItem(renglon, 16,
					new QTableWidgetItem(""));

	}
}
